package com.example.rockscissorspapergame.dialog;

import com.example.rockscissorspapergame.ResourceTable;
import ohos.agp.components.*;
import ohos.app.Context;
import ohos.distributedschedule.interwork.DeviceInfo;

import java.util.List;

/**
 * 设备列表项提供者
 */
public class DeviceItemProvider extends BaseItemProvider {

    /**
     * 支持分布式协同的设备列表
     */
    private final List<DeviceInfo> mDeviceDataList;
    /**
     * 上下文
     */
    private final Context mContext;
    /**
     * 子项布局 ID
     */
    private final int mItemLayoutId;

    /**
     * 构造方法
     *
     * @param context        上下文
     * @param deviceDataList 支持分布式协同的设备列表
     * @param itemLayoutId   子项布局 ID
     */
    public DeviceItemProvider(Context context, List<DeviceInfo> deviceDataList, int itemLayoutId) {
        this.mContext = context;
        this.mDeviceDataList = deviceDataList;
        this.mItemLayoutId = itemLayoutId;
    }

    @Override
    public int getCount() {
        // 若设备列表为空或 null，返回 0
        // 否则返回设备列表长度
        if (mDeviceDataList == null || mDeviceDataList.isEmpty()) {
            return 0;
        } else {
            return mDeviceDataList.size();
        }
    }

    @Override
    public Object getItem(int i) {
        // 若设备列表为空或 null，返回 null
        // 返回对应位置的设备信息对象
        if (mDeviceDataList == null || mDeviceDataList.isEmpty()) {
            return null;
        } else {
            return mDeviceDataList.get(i);
        }
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public Component getComponent(int i, Component convertComponent, ComponentContainer componentContainer) {
        final Component component;
        // 绘制子项布局，若没有实例，则使用LayoutScatter进行绘制，否则复用原实例
        if (convertComponent == null) {
            component = LayoutScatter.getInstance(mContext).parse(mItemLayoutId, null, false);
        } else {
            component = convertComponent;
        }
        // 绘制子项布局上的组件
        Image itemImageType = (Image) component.findComponentById(ResourceTable.Id_item_type);
        Text itemTextDesc = (Text) component.findComponentById(ResourceTable.Id_item_desc);
        Text itemTextId = (Text) component.findComponentById(ResourceTable.Id_item_id);
        // 将对应索引的设备信息显示到界面上
        DeviceInfo itemInfo = mDeviceDataList.get(i);
        itemTextDesc.setText(itemInfo.getDeviceName());
        itemTextId.setText(itemInfo.getDeviceId());
        switch (itemInfo.getDeviceType()) {
            case SMART_PHONE:
                itemImageType.setPixelMap(ResourceTable.Media_dv_phone);
                break;
            case SMART_PAD:
                itemImageType.setPixelMap(ResourceTable.Media_dv_pad);
                break;
            case SMART_WATCH:
                itemImageType.setPixelMap(ResourceTable.Media_dv_watch);
                break;
        }
        // 返回布局实例
        return component;
    }
}
